home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Libraries / SAT 2.3b4 / Demo ƒ / myPlatform demo ƒ / sPlayerSprite.c < prev    next >
Text File  |  1994-08-21  |  2KB  |  114 lines

  1. /* Player sprite for the Platform test */
  2.  
  3. #include "SAT.h"
  4. #include <stdlib.h>
  5. #include "myPlatform.h"
  6.  
  7. #ifndef abs
  8. #define abs(x)    (x>0?x:-x)
  9. #endif
  10.  
  11. FacePtr    rightFaces[4], leftFaces[4];
  12. FacePtr    fallFace[2] ;
  13.  
  14. void InitPlayerSprite()
  15. {
  16.     int i;
  17.     
  18.     for(i=0;i<=3;i++){
  19.         rightFaces[i] = SATGetFace(128 + i);
  20.         leftFaces[i] = SATGetFace(132 + i);
  21.     }
  22.     for(i=0;i<=1;i++)
  23.         fallFace[i] = SATGetFace(136 + i);
  24. }
  25.  
  26. pascal void HandlePlayerSprite(SpritePtr me)
  27. {
  28.     EventRecord    theEvent;
  29.     char            temp;
  30.     
  31.         if(me->kind == 10) {
  32.             me->speed.h /= 2;
  33.         }
  34.  
  35.         if(GetOSEvent(keyDownMask + autoKeyMask, &theEvent))
  36.             if(me->kind != 1){
  37.             temp = (char)BitAnd(theEvent.message, charCodeMask);
  38.             switch(temp){
  39.                 case ',':     me->speed.h = -5;
  40.                         break;
  41.                 case '.':     me->speed.h = 5;
  42.                         break;
  43.                 case ' ':     me->speed.v = -10;
  44.                         break;
  45.             }
  46.         } /* if */
  47.  
  48.         me->position.h += me->speed.h;
  49.         me->position.v += me->speed.v;
  50.         
  51.         if(me->kind < 3)  /*acceleration when falling*/
  52.             me->speed.v += 1;
  53.         if(me->speed.v > 30)
  54.             me->speed.v = 30;
  55.  
  56.         if(me->kind > 1)
  57.             me->kind -= 1;
  58.  
  59. /*Make sure we are always visible!*/
  60.         if (me->position.v < 0){
  61.             me->position.v = 0;
  62.             me->speed.v = 0;
  63.         }
  64.         if(me->position.h < 0){
  65.             me->position.h = 0;
  66.             me->speed.h = abs(me->speed.h);
  67.         }
  68.         if(me->position.v > gSAT.offSizeV - 32) {
  69.             me->position.v = gSAT.offSizeV - 32;
  70.             me->speed.v = (-abs(me->speed.v) * 2)/3;
  71.             me->kind = 7; 
  72.         }
  73.         if(me->position.h > gSAT.offSizeH - 32){
  74.             me->position.h = gSAT.offSizeH - 32;
  75.             me->speed.h = -abs(me->speed.h);
  76.         } 
  77.  
  78.         me->mode = abs(me->mode + 1);
  79.  
  80.         if(me->kind > 1){
  81.             if(me->speed.h > 0)
  82.                 me->face = rightFaces[(me->mode/3) & 3]; 
  83.             if(me->speed.h < 0)
  84.                 me->face = leftFaces[(me->mode/3) & 3]; 
  85.         }
  86.         else
  87.              me->face = fallFace[me->mode & 1]; 
  88.             
  89.             
  90.         me->layer = -1*(me->position.v);
  91. }
  92.  
  93. pascal void SetupPlayerSprite(SpritePtr me)
  94. {
  95.         me->mode = 0;
  96.         me->speed.h = 1;
  97.         me->kind = 1;                                  /* friend kind */
  98.         SetRect(&(me->hotRect), 8, 0, 24, 32);
  99.         me->face = fallFace[0];
  100.         me->task = &HandlePlayerSprite;
  101.         me->hitTask = &HitPlayerSprite;
  102. }
  103.  
  104. pascal void HitPlayerSprite(SpritePtr me, SpritePtr him)
  105. {
  106.  
  107. /* Hit something! We can take whatever action we need here, but in this case,
  108.      we let the other sprites decide. We could have omitted this function altogether and passed nil.*/
  109.         if(him->kind == 1){
  110.         }
  111.         else if(him->kind == 2 )
  112.         {
  113.         }
  114. }